﻿#define _CRT_SECURE_NO_WARNINGS 

//#include<stdio.h>
//int main()
//{
//	int line = 0;
//	scanf("%d", &line);
//	for (int i = 1; i <= line; i++)
//	{
//		for (int j = 1; j <= i; j++)
//		{
//			if (i < 10)
//			{
//				printf("%d*%d=%-5d", j, i, i * j);
//			}
//			else
//			{
//				printf("%d*%d=%-4d", j, i, i * j);
//
//			}
//			
//			
//		}
//		printf("\n");
//	}
//	return 0;
//
//}


//#include <stdio.h>
////杨辉三角
//int main()
//{
//	int n;
//	printf("请输入要打印的行数：");
//	scanf("%d", &n);
//	int a[100][100];
//	for (int i = 0; i < n; i++)
//	{
//		a[i][0] = 1;
//		a[i][i] = 1;    //先将杨辉三角每行的第一个和最后一个赋值为1 
//	}
//
//	for (int i = 2; i < n; i++)      //已知每个数等于它上方两数的之和 
//	{
//		for (int j = 1; j < i; j++)
//		{
//			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
//		}
//	}
//
//
//	for (int i = 0; i < n; i++)     //打印输出 
//	{
//		for (int j = 0; j <= i; j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//}
//

//#include <stdio.h>
//
//int main()
//{
//	int n;
//	int data[30] = { 1 };
//	printf("请输入要打印的行数:>");
//	scanf("%d", &n);
//	printf("1\n");//直接打印第一行
//	for (int i = 1; i < n; i++)//从第二行开始
//	{
//		for (int j = i; j > 0; j--)//从后往前填，避免上一行的数据在使用前就被覆盖
//		{
//			data[j] += data[j - 1];
//		}
//		for (int j = 0; j <= i; j++)
//		{
//			printf("%d ", data[j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//
//int isprime(int a)
//{
//	int i = 0;
//	for (i = 2; i < a; i++)
//	{
//		if (a % i == 0)
//		{
//			return 0;
//		}
//	}
//	return 1;
//}

//素数筛选
//#include<stdio.h>
//int main()
//{ 
//	int i = 0;
//	int arr[101] = { 0 };
//	
//	//初始化数组为0 1 2 3 4 5 6 7 8 9 ……100
//	for (i = 0; i <= 100; i++)
//	{
//		arr[i] = i;
//	}
//
//	//开始筛选
//	arr[1] = 0;//先把一设为非素数
//	int index=2;//记录素数的下标也就是数字本身，从2开始	
//	while (index <= 100)
//	{
//		i = 2;
//		//把值为index的数的倍数全变成0，i表示2倍，3倍，4倍……
//		while (index * i <= 100)
//		{
//			arr[index * i] = 0;
//			i++;
//		}
//
//		//向前进找到最近的素数下标
//		do {
//			index++;
//		} while (arr[index] == 0);
//	}
//
//	//输出
//	int count = 0;  //计数器
//	for (i = 1; i <= 100; i++)
//	{
//		if (arr[i] != 0)
//		{
//			printf("%d  ", arr[i]);
//			count++;
//		}
//		if (count % 10 == 0)    //输出10个数后换行
//		{
//			printf("\n");
//		}
//
//	}
//
//
//	return 0;
//}


//1.暴力遍历法
//int gcd(int n1,int n2)
//{
//	int i = 0;
//	int n = (n1 > n2 ? n2 : n1);
//	for (i = n; i >=1 ; i-- )
//	{
//		if (n1 % i == 0 && n2 % i == 0)
//		{
//			return i;
//		}
//	}
//	return 1;
//}
//#include<stdio.h>
//int main()
//{
//	printf("%d", gcd(21, 42));
//	return 0;
//
//}




//2.辗转相除法
//int gcd(int n1, int n2)
//{
//	int num = 0;
//	while ((num = n1 % n2) != 0)
//	{
//		n1 = n2;
//		n2 = num;
//	}
//	return n2;
//}
//int gcd(int n1, int n2)
//{
//	if (n1 % n2 == 0)
//	{
//		return n2;
//	}
//	else
//	{
//		return gcd(n2, n1 % n2);
//	}
//}
//#include<stdio.h>
//int main()
//{
//	printf("%d", gcd(21, 42));
//	return 0;
//
//}

////猜数字游戏
//#include <stdio.h>
//#include<stdlib.h>
//#include <windows.h>
//#include<time.h>
//
//
//void menu()
//{
//	printf("-------------welcom!-------------\n");
//	printf("---------请输入您的选择：--------\n");
//	printf("----1.开始游戏------2.exit-------\n");
//
//}
//void game()
//{
//	int guessnum = rand() % 100 + 1;
//	int tmp = 0;
//	printf("游戏开始请输入您猜的数字：\n");
//	while (1)
//	{
//		scanf("%d", &tmp);
//		if (tmp > guessnum)
//		{
//			printf("您猜大了，请重新猜：\n");
//		}
//		else if (tmp < guessnum)
//		{
//			printf("您猜小了，请重新猜：\n");
//		}
//		else
//		{
//			printf("恭喜您，猜对了！\n");
//			break;
//		}
//	}
//}
//int main()
//{
//	int flag = -1;
//	srand((unsigned)time(NULL));
//	menu();
//	while (flag != 2)
//	{
//		scanf("%d", &flag);
//		if (1 == flag)
//		{
//			system("cls");
//			game();
//			Sleep(100);
//			menu();
//		}
//		else if (2 == flag)
//		{
//			printf("成功退出游戏！");
//		}
//		else
//		{
//			printf("您输入的数字有误，请重新输入！\n");
//		}
//
//
//	}
//}


#include<stdio.h>
int main()
{
	int data[9][9];//定义一个9行9列的数组
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9; j++)
			data[i][j] = 1;
	}//将数组中的所有数字赋值为1，如思路中1
	for (int i = 1; i < 9; i++)
	{
		for (int j = 1; j < i; j++)
			data[i][j] = data[i - 1][j] + data[i - 1][j - 1];//当前数=上一行的数+上一行前面的数
	}//处理中间数据，如思路中3
	for (int i = 0; i < 9; i++)
	{
		for (int k = 0; k < 26 - 6 * i / 2; k++)
			printf(" ");//使数据居中显示，如思路中4
		for (int j = 0; j <= i; j++)//j<=i表示仅输出左下角数据，如思路中2
			printf("%6d", data[i][j]);
		printf("\n");//输出数组所有数据
	}
	return 0;
}